package com.psjj.demo2;

/**
 *        1.成员变量、全局变量、字段
 *        2.成员静态变量
 *        3.成员常量
 *        4.成员方法
 *        5.静态方法
 *        6.构造代码块
 *        7.构造方法
 *        8.静态代码块
 *        9.普通内部类
 *        10.静态内部类
 */
public class Demo1 {
    //定义成员变量
    int a = 1;
    //成员静态变量
    static int b = 2;
    //成员方法
    final int c = 3;
    //成员方法
    public void method1(){
        System.out.println("成员方法");
    }
    //成员静态方法
    public static void method2(){
        System.out.println("成员静态方法");
    }
    //构造代码块,每调用一次构造方法就会调用一次构造代码块
    {
        System.out.println("构造代码块");
    }
    //静态代码块，只要加载类就会运行静态代码块，而且只运行一次
    static {
        System.out.println("静态代码块");
    }
    //构造方法
    public Demo1(){
        System.out.println("构造方法");
    }
    //普通内部类 不能定义静态成员
    private class Inner{
        int a = 11;
        //static int b = 12;
        public void method1(){
            System.out.println("内部类普通方法");
            System.out.println(Demo1.this.a);
        }
    }
    //静态内部类,可以定义普通成员和静态成员
    private static class Inner2{
        int a = 111;
        static int b = 222;
        public void method1(){
            System.out.println("静态内部类普通方法");
        }
    }

    public static void main(String[] args) {
        //创建对象
        Demo1 demo1 = new Demo1();
        System.out.println(demo1.a);
        System.out.println(Demo1.b);
        //创建普通内部类对象
        Inner inner = demo1.new Inner();
        System.out.println(inner.a);
        inner.method1();
        //创建静态内部类对象
        Demo1.Inner2 inner2 = new Demo1.Inner2();
        System.out.println(inner2.a);
        System.out.println(Demo1.Inner2.b);
        Father father = new Son();
    }
}
class Father{
    void have(){

    }
}
class Son extends Father{
    void have(){

    }
}